package xijia.plus.docs.thymeleafuser.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author wangsong
 * @version 1.0.0
 * @mail 1720696548@qq.com
 * @date 2022/11/14 0014 20:19
 */
@Slf4j
@Component
public class TpUtil {

    @Autowired
    private TemplateEngine templateEngine;

    /**
     * 创建出一个name.html文件
     *
     * @param templateName 模板名称
     * @param fileName     生成后的html名  name.html，如果有路径，则 路径/名称
     * @param map          模板映射参数
     */
    public String createHtml(String templateName, String fileName, Map<String, Object> map) {
        PrintWriter writer = null;
        try {
            SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
            // 1. 创建模板解析目录解析器
            Set<ITemplateResolver> templateResolvers = templateEngine.getTemplateResolvers();

            // 无配置模板解析路径,则代码配置
            if (!templateResolvers.iterator().hasNext()) {
                // 2. 创建模板解析器 并设置相关属性
//                resolver.setPrefix("resources/templates/view/");
//                resolver.setSuffix(".html");
                resolver.setTemplateMode("HTML5");
                resolver.setCacheable(true);
                resolver.setPrefix("templates/view/");
                resolver.setSuffix(".html");
                // 不允许重复设置 否则会报错
                templateEngine.setTemplateResolver(resolver);
            }


            // 2. 模板上下文 主要存储Model参数
            Context context = new Context();
            if (map.size() > 0) {
                context.setVariables(map);
            }

            // 3. 创建输出文件
            String path =  fileName + ".html";
            File file = new File(path);
            File fileParent = file.getParentFile();
            if (!fileParent.exists()) {
                fileParent.mkdirs();
            }
            //如果文件不存在,直接创建
            if (!file.exists()) {
                file.createNewFile();
            }

            // 5. 获取输出目标文件输出流
            writer = new PrintWriter(file, "UTF-8");

            // 6. 生成静态模板参数 1:template模板名称  参数2:上下文对象  参数3:目标文件输出流
            templateEngine.process(templateName, context, writer);
            // log.info("http path: {}", folder.getAbsolutePath());
            // 返回生成文件路径
            return path;
        } catch (IOException e) {
            //log.error("createHtml error {}", ExceptionUtil.getStackTrace(e));
            e.printStackTrace();
        } finally {
            // flush输出流并关闭
            if (writer != null) {
                writer.flush();
                writer.close();
            }
        }
        return null;
    }


    public static void main(String[] args) {
        Map<String, Object> params = new HashMap<>();
        //createHtml("index", "index", params);
    }

}
